# -*- coding: utf-8 -*-
import scrapy
import time


class RenrenSpider(scrapy.Spider):
    name = 'renren'
    allowed_domains = ['renren.com']

    # start_urls = ['http://www.renren.com/']

    def start_requests(self):
        """登录POST请求开始"""
        # 通过分析，发现人人网登录采用的是AJAX的POST请求方式
        # 并且是url后加有一个唯一的时间戳uniqueTimestamp做标识
        url = 'http://www.renren.com/ajaxLogin/login?1=1&uniqueTimestamp='

        # 在login.js中发现时间戳采用如下格式： "&uniqueTimestamp=" + s.getFullYear() + s.getMonth() + s.getDay() + s.getHours() +
        # s.getSeconds()+ s.getUTCMilliseconds()
        s = time.strftime('%H%S')  # 获取秒
        ms = int(round(time.time() % (int(time.time())), 3) * 1000)  # 获取毫秒
        Timestamp = '201981' + s + str(ms)  # 拼装时间戳
        login_url = url + Timestamp  # 拼装登录URL
        # POST请求数据字典，其中 password与rkey经过多次请求发现，加密串可以重复使用
        form_data = {
            'email': '18482172827',
            'icode': '',
            'origURL': 'http://www.renren.com/home',
            'domain': 'renren.com',
            'key_id': '1',
            'captcha_type': 'web_login',
            'password': '1149df025f57013b1df0575ef24b0ca53b195c6cc0a5551388c75568191c4362',
            'rkey': 'd0cf42c2d3d337f9e5d14083f2d52cb2',
            'f': 'http%3A%2F%2Fwww.renren.com%2F972120053%2Fprofile',
        }
        # FormRequest 是Scrapy发送POST请求的方法
        # 构造表单请求，其中callback为回调
        yield scrapy.FormRequest(url=login_url, formdata=form_data, callback=self.parse_login, dont_filter=True)

    # 登录成功后，请求我的主页，发现会经过两次302跳转，重新重定向到登录页，导致首页访问失败
    # 初步考虑为cookie丢失的原因，COOKIES_ENABLED=False,此项在默认情况下是开启，但是采用默认cookie设置，
    # 解除注释后为禁用cookie ,COOKIES_ENABLED=True时,开启cookie,同时采用自定义cookie，
    # 此处设置为COOKIES_ENABLED=True，Scrapy自动将POST请求的set-cookie作为后续GET请求的cookie，
    # 将COOKIES_DEBUG开启后可得到详细请求信息
    def parse_login(self, response):
        """登录成功后，GET请求我的主页"""
        yield scrapy.Request(url='http://www.renren.com/972120053', callback=self.parse_save, dont_filter=True)

    @staticmethod
    def parse_save(response):
        """保存响应内容"""
        with open("./home.html", "w", encoding='utf-8') as file:
            file.write(response.text)  # 写入文件

    def parse(self, response):
        pass
